%%%-------------------------------------------------------------------
%%% @author liuwentao
%%% @doc
%%%     道具头文件
%%% @end
%%% Created : 19. 7月 2021 14:50
%%%-------------------------------------------------------------------
-author("liuwentao").


%%----------------------------------------------------
%% 物品数据结构
%% @author yeahoo2000@gmail.com
%% @end
%%----------------------------------------------------

%% 物品版本号
-define(item_ver, 1).

%% 物品类型
-define(item_type_etc, 0).          %% 未定义的物品
-define(item_type_numeric, 9999).   %% 数值

%% 物品品质定义
-define(quality_white, 0).         %% 白
-define(quality_green, 1).         %% 绿
-define(quality_blue, 2).         %% 蓝
-define(quality_purple, 3).         %% 紫
-define(quality_orange, 4).         %% 橙
-define(quality_red, 5).         %% 红
-define(quality_gold, 6).         %% 金


%% 物品使用方式定义
-define(item_use_not, 0).           %% 不能直接使用
-define(item_use_dec, 1).           %% 消耗
-define(item_use_can, 2).           %% 不消耗
-define(item_use_puton, 3).         %% 穿戴
-define(item_use_pet, 4).           %% 侍宠穿戴
-define(item_use_batch, 5).         %% 批量使用


%% 过期类型定义
-define(item_expire_null, 0).               %% 无过期
-define(item_expire_endtime, 1).            %% 获得起-过期分钟
-define(item_expire_enddate, 2).            %% 获得起-过期日期
-define(item_expire_starttime, 3).          %% 获得起-开启分钟
-define(item_expire_startdate, 4).          %% 获得起-开启日期
-define(item_expire_puton_endtime, 5).      %% 穿戴起-过期分钟
-define(item_expire_puton_enddate, 6).      %% 穿戴起-过期日期
-define(item_expire_custom_times, 7).       %% 自定义时间


%% 基础物品数据结构
-record(item_base, {
    %% 物品基础ID
    id = 0 :: non_neg_integer()
    %% 物品名称
    , name = "" :: list()
    %% 是否绑定
    , bind = 1 :: 0 | 1
    %% 物品类型，具体定义见上面的宏
    , type = ?item_type_etc :: non_neg_integer()
    %% 背包类型
    , package_type = 1 :: non_neg_integer()
    %% 物品品质
    , quality = ?quality_white :: 0..5
    %% 最大堆叠数量
    , overlap = 1 :: pos_integer()
    %% 外观ID
    , look_id = 0 :: non_neg_integer()
    %%物品组
    , group = 0 :: non_neg_integer()
    %% 物品的使用方式
    , use_type = ?item_use_not :: 0..4
    %% 物品失效类型
    , expire_type = ?item_expire_null :: non_neg_integer()
    %% 物品失效时间             %% 天数 | 具体日期
    , expire_time = 0 :: non_neg_integer() | {{pos_integer(), pos_integer(), pos_integer()}, {non_neg_integer(), non_neg_integer(), non_neg_integer()}}
    %% 套装ID
    , suit_id = 0 :: non_neg_integer()
    %% 评分-----装备评分使用
    , score = 0 :: non_neg_integer()
    %% 是否需要鉴定   0:不需要鉴定   1:需要鉴定    默认为0
    , need_identify = 0 :: 0 | 1
    %% 物品穿戴属性
    , attr = [] :: [tuple()]
    %% 等级
    , lev = 0
    %% 穿戴等级
    , put_lev = 0
    %% 性别
    , sex = 2
    %% 职业
    , classes = 0
    %% 可购买途径
    , buy_source = []
    %% 使用条件或穿戴条件，满足全部条件后才能使用或穿戴[#condition{}]
    , condition = [] :: [tuple()]
    %% 使用效果
    , effect = [] :: [tuple()]
    %%每日使用上限
    , day_limit = 0 :: integer()
    %%每周使用上限
    , week_limit = 0 :: integer()
    %%买入卖出价格
    , price = [] :: [integer()]
    %%可用阶数
    , use_jie = 0 :: integer()
    %% 使用消耗
    , loss = [] :: integer()
    %% 对应的异性物品id(变性别用)
    , diff_sex_id = 0 :: integer()
    %% 对应职业物品
    , change_classes = []
    %% tips购买
    , tips_buy = []
}).

%% 角色物品数据结构
-record(item, {
    %% 物品版本号
    ver = ?item_ver :: non_neg_integer()
    %% 物品ID
    , id = 0 :: non_neg_integer()
    %% 对应的基础物品数据
    , base_id = 0 :: non_neg_integer()
    %% 是否绑定
    , bind = 1 :: 0 | 1
    %%物品组
    , group = 0 :: non_neg_integer()
    %% 物品类型，具体定义见上面的宏
    , type = ?item_type_etc :: non_neg_integer()
    %% 使用类型
    , use_type = ?item_use_not :: 0..5
    %% 物品品质
    , quality = ?quality_white :: 0..4
    %% 品阶
    , step = 0 :: pos_integer()
    %% 堆叠数量
    , quantity = 1 :: 0..250
    %% 在包裹中的位置
    , pos = 0 :: non_neg_integer()
    %% 物品过期类型
    , expire_type = ?item_expire_null :: 0..4
    %% 物品过期时间             %% unixtime
    , expire_time = 0 :: non_neg_integer()
    %% 物品经过加工后的属性 [{type, [{属性id,属性值}]}]
    , attr_ext = [] :: [tuple()]
    %% 等级需求
    , lev = 1 :: pos_integer()
    %% 性别
    , sex = 2 :: 0..2
    %% 用于保存扩展数据，需要传给客户端
    , extra = [] :: [{integer(), integer(), string()}]
    %%创建时间
    , create_time = 0 :: non_neg_integer()
    %% 附加属性[{品质,档次,属性id,属性值}]
    , attr_other = [] :: [tuple()]
    %% 是否鉴定(防止洗练之后把附加属性洗空了,此时判断不了装备是否已鉴定)
    , is_identify = 0 :: 0..1
}).


